changed new_with_types to just plain new, fixing the number of columns,
authorJonathan Blandford <jrb@redhat.com>
Sat, 30 Jun 2001 02:38:17 +0000 (02:38 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Sat, 30 Jun 2001 02:38:17 +0000 (02:38 +0000)
Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>

* gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
to just plain new, fixing the number of columns, and column types
at creation time.

* gtk/gtkliststore.c (gtk_list_store_new): ditto.

* gtk/gtkcellrenderertext.c
(gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
height to a specific font.

* gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.

* tests/*c: change to work with new store models.

25 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
demos/gtk-demo/main.c
demos/gtk-demo/stock_browser.c
gtk/gtkcellrenderer.c
gtk/gtkcellrenderer.h
gtk/gtkcellrenderertext.c
gtk/gtkcellrenderertext.h
gtk/gtkliststore.c
gtk/gtkliststore.h
gtk/gtktreestore.c
gtk/gtktreestore.h
gtk/gtktreeview.c
gtk/gtktreeviewcolumn.c
gtk/gtktreeviewcolumn.h
tests/testtreecolumns.c
tests/testtreefocus.c
tests/testtreesort.c
tests/testtreeview.c
tests/treestoretest.c

index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 2c486626eaf2d062e9ac9187d5d7ad2f58c93ce9..9a41a14e5c6323d054c48b6f4088101c8c7869ac 100644 (file)
@@ -1,3 +1,19 @@
+Fri Jun 29 22:13:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreestore.c (gtk_tree_store_new): changed new_with_types
+       to just plain new, fixing the number of columns, and column types
+       at creation time.
+
+       * gtk/gtkliststore.c (gtk_list_store_new): ditto.
+
+       * gtk/gtkcellrenderertext.c
+       (gtk_cell_renderer_text_set_fixed_height_from_font): FIX the
+       height to a specific font.
+
+       * gtk/gtktreeview.c (gtk_tree_view_is_expander_column): fix brokenness.
+
+       * tests/*c: change to work with new store models.
+
 2001-06-29  Havoc Pennington  <hp@redhat.com>
 
        * Throughout: fixes to compile with G_DISABLE_COMPAT
index 9ea9c87ae5069e87d9931da10efd555108545bd1..d06070ed0c70ef5c70cdf58ba121ee80f08052fa 100644 (file)
@@ -680,7 +680,7 @@ create_tree (void)
   GtkTreeIter iter;
   gint i;
 
-  model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+  model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
   tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
 
index a850a428d7c9572e70b60293c950ec771bec3cd4..b5966b088c31ae39ad54fddffc274b51987bfa7d 100644 (file)
@@ -134,7 +134,7 @@ create_model (void)
   GSList *ids;
   GSList *tmp_list;
   
-  store = gtk_list_store_new_with_types (1, STOCK_ITEM_INFO_TYPE);
+  store = gtk_list_store_new (1, STOCK_ITEM_INFO_TYPE);
 
   ids = gtk_stock_list_ids ();
   ids = g_slist_sort (ids, (GCompareFunc) strcmp);
index 69e4711ec6ae41c0de4cca689643ee1e593e2321..610d807bdb0cd14ad6f115288b0576757b80cb06 100644 (file)
@@ -40,6 +40,8 @@ enum {
   PROP_YALIGN,
   PROP_XPAD,
   PROP_YPAD,
+  PROP_WIDTH,
+  PROP_HEIGHT,
 };
 
 
@@ -78,6 +80,8 @@ gtk_cell_renderer_init (GtkCellRenderer *cell)
 
   cell->can_activate = FALSE;
   cell->visible = TRUE;
+  cell->width = -1;
+  cell->height = -1;
   cell->xalign = 0.5;
   cell->yalign = 0.5;
   cell->xpad = 0;
@@ -156,6 +160,28 @@ gtk_cell_renderer_class_init (GtkCellRendererClass *class)
                                                      2,
                                                      G_PARAM_READABLE |
                                                      G_PARAM_WRITABLE));
+
+  g_object_class_install_property (object_class,
+                                  PROP_WIDTH,
+                                  g_param_spec_int ("width",
+                                                    _("width"),
+                                                    _("The fixed width."),
+                                                    -1,
+                                                    100,
+                                                    -1,
+                                                    G_PARAM_READABLE |
+                                                    G_PARAM_WRITABLE));
+
+  g_object_class_install_property (object_class,
+                                  PROP_HEIGHT,
+                                  g_param_spec_int ("height",
+                                                    _("height"),
+                                                    _("The fixed height."),
+                                                    -1,
+                                                    100,
+                                                    -1,
+                                                    G_PARAM_READABLE |
+                                                    G_PARAM_WRITABLE));
 }
 
 static void
@@ -186,6 +212,12 @@ gtk_cell_renderer_get_property (GObject     *object,
     case PROP_YPAD:
       g_value_set_uint (value, cell->ypad);
       break;
+    case PROP_WIDTH:
+      g_value_set_int (value, cell->width);
+      break;
+    case PROP_HEIGHT:
+      g_value_set_int (value, cell->height);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
@@ -227,6 +259,14 @@ gtk_cell_renderer_set_property (GObject      *object,
       cell->ypad = g_value_get_uint (value);
       g_object_notify (object, "ypad");
       break;
+    case PROP_WIDTH:
+      cell->width = g_value_get_int (value);
+      g_object_notify (object, "width");
+      break;
+    case PROP_HEIGHT:
+      cell->height = g_value_get_int (value);
+      g_object_notify (object, "height");
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
@@ -257,10 +297,29 @@ gtk_cell_renderer_get_size (GtkCellRenderer *cell,
                            gint            *width,
                            gint            *height)
 {
+  gint *real_width = NULL;
+  gint *real_height = NULL;
+
   g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
   g_return_if_fail (GTK_CELL_RENDERER_GET_CLASS (cell)->get_size != NULL);
 
-  GTK_CELL_RENDERER_GET_CLASS (cell)->get_size (cell, widget, cell_area, x_offset, y_offset, width, height);
+  if (width)
+    {
+      if (cell->width == -1)
+       real_width = width;
+      else
+       *width = cell->width;
+    }
+  if (height)
+    {
+      if (cell->height == -1)
+       real_height = height;
+      else
+       *height = cell->height;
+    }
+
+  if (real_width || real_height)
+    GTK_CELL_RENDERER_GET_CLASS (cell)->get_size (cell, widget, cell_area, x_offset, y_offset, real_width, real_height);
 }
 
 /**
@@ -353,3 +412,52 @@ gtk_cell_renderer_event (GtkCellRenderer     *cell,
                                                    flags);
 }
 
+/**
+ * gtk_cell_renderer_set_fixed_size:
+ * @cell: A #GtkCellRenderer
+ * @width: the width of the cell renderer, or -1
+ * @height: the height of the cell renderer, or -1
+ * 
+ * Sets the renderer size to be explicit, independent of the properties set.
+ **/
+void
+gtk_cell_renderer_set_fixed_size (GtkCellRenderer *cell,
+                                 gint             width,
+                                 gint             height)
+{
+  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
+  g_return_if_fail (width >= -1 && height >= -1);
+
+  if (width != cell->width)
+    {
+      cell->width = width;
+      g_object_notify (G_OBJECT (cell), "width");
+    }
+
+  if (height != cell->height)
+    {
+      cell->height = height;
+      g_object_notify (G_OBJECT (cell), "height");
+    }
+}
+
+/**
+ * gtk_cell_renderer_get_fixed_size:
+ * @cell: A #GtkCellRenderer
+ * @width: location to fill in with the fixed width of the widget, or %NULL
+ * @height: location to fill in with the fixed height of the widget, or %NULL
+ * 
+ * Fills in @width and @height with the appropriate size of @cell.
+ **/
+void
+gtk_cell_renderer_get_fixed_size (GtkCellRenderer *cell,
+                                 gint            *width,
+                                 gint            *height)
+{
+  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
+
+  if (width)
+    (* width) = cell->width;
+  if (height)
+    (* height) = cell->height;
+}
index 7084ba0c54493147734810c5778a1779acdde18d..10729290f298cc071953f87b0437c6b1e8c1a20b 100644 (file)
@@ -51,14 +51,17 @@ struct _GtkCellRenderer
 {
   GtkObject parent;
 
-  gboolean can_activate;
-  gboolean visible;
-
   gfloat xalign;
   gfloat yalign;
 
+  gint width;
+  gint height;
+
   guint16 xpad;
   guint16 ypad;
+
+  guint can_activate : 1;
+  guint visible : 1;
 };
 
 struct _GtkCellRendererClass
@@ -91,28 +94,35 @@ struct _GtkCellRendererClass
                       GtkCellRendererState flags);
 };
 
-GtkType  gtk_cell_renderer_get_type (void);
-void     gtk_cell_renderer_get_size (GtkCellRenderer      *cell,
-                                    GtkWidget            *widget,
-                                    GdkRectangle         *cell_area,
-                                    gint                 *x_offset,
-                                    gint                 *y_offset,
-                                    gint                 *width,
-                                    gint                 *height);
-void     gtk_cell_renderer_render   (GtkCellRenderer      *cell,
-                                    GdkWindow            *window,
-                                    GtkWidget            *widget,
-                                    GdkRectangle         *background_area,
-                                    GdkRectangle         *cell_area,
-                                    GdkRectangle         *expose_area,
-                                    GtkCellRendererState  flags);
-gboolean gtk_cell_renderer_event    (GtkCellRenderer      *cell,
-                                    GdkEvent             *event,
-                                    GtkWidget            *widget,
-                                    gchar                *path,
-                                    GdkRectangle         *background_area,
-                                    GdkRectangle         *cell_area,
-                                    GtkCellRendererState  flags);
+GtkType  gtk_cell_renderer_get_type       (void);
+void     gtk_cell_renderer_get_size       (GtkCellRenderer      *cell,
+                                          GtkWidget            *widget,
+                                          GdkRectangle         *cell_area,
+                                          gint                 *x_offset,
+                                          gint                 *y_offset,
+                                          gint                 *width,
+                                          gint                 *height);
+void     gtk_cell_renderer_render         (GtkCellRenderer      *cell,
+                                          GdkWindow            *window,
+                                          GtkWidget            *widget,
+                                          GdkRectangle         *background_area,
+                                          GdkRectangle         *cell_area,
+                                          GdkRectangle         *expose_area,
+                                          GtkCellRendererState  flags);
+gboolean gtk_cell_renderer_event          (GtkCellRenderer      *cell,
+                                          GdkEvent             *event,
+                                          GtkWidget            *widget,
+                                          gchar                *path,
+                                          GdkRectangle         *background_area,
+                                          GdkRectangle         *cell_area,
+                                          GtkCellRendererState  flags);
+void     gtk_cell_renderer_set_fixed_size (GtkCellRenderer      *cell,
+                                          gint                  width,
+                                          gint                  height);
+void     gtk_cell_renderer_get_fixed_size (GtkCellRenderer      *cell,
+                                          gint                 *width,
+                                          gint                 *height);
+
 
 #ifdef __cplusplus
 }
index 937835f615f50c82ff929b569eb6a67b893367b9..f79e1c8f8a2e39ad1c3b140f13231783edd30d55 100644 (file)
@@ -127,6 +127,8 @@ gtk_cell_renderer_text_init (GtkCellRendererText *celltext)
   GTK_CELL_RENDERER (celltext)->yalign = 0.5;
   GTK_CELL_RENDERER (celltext)->xpad = 2;
   GTK_CELL_RENDERER (celltext)->ypad = 2;
+
+  celltext->fixed_height_rows = -1;
 }
 
 static void
@@ -785,11 +787,15 @@ gtk_cell_renderer_text_set_property (GObject      *object,
         
         if (font_desc)
           pango_font_description_free (font_desc);
+       if (celltext->fixed_height_rows != -1)
+         celltext->calc_fixed_height = TRUE;
       }
       break;
 
     case PROP_FONT_DESC:
       set_font_description (celltext, g_value_get_boxed (value));
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_FAMILY:
@@ -801,6 +807,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "family_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_STYLE:
@@ -810,6 +818,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "style_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_VARIANT:
@@ -819,6 +829,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "variant_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_WEIGHT:
@@ -828,6 +840,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "weight_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_STRETCH:
@@ -837,6 +851,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "stretch_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_SIZE:
@@ -846,11 +862,15 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "size_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_SCALE:
       celltext->font_scale = g_value_get_double (value);
       celltext->scale_set = TRUE;
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
       
     case PROP_SIZE_POINTS:
@@ -860,6 +880,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       g_object_notify (G_OBJECT (celltext), "size_set");
       g_object_notify (G_OBJECT (celltext), "font_desc");
       g_object_notify (G_OBJECT (celltext), "font");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;
 
     case PROP_EDITABLE:
@@ -885,6 +907,8 @@ gtk_cell_renderer_text_set_property (GObject      *object,
       celltext->rise = g_value_get_int (value);
       celltext->rise_set = TRUE;
       g_object_notify (G_OBJECT (celltext), "rise_set");
+      if (celltext->fixed_height_rows != -1)
+       celltext->calc_fixed_height = TRUE;
       break;  
 
     case PROP_BACKGROUND_SET:
@@ -1083,20 +1107,54 @@ gtk_cell_renderer_text_get_size (GtkCellRenderer *cell,
                                 gint            *width,
                                 gint            *height)
 {
-  GtkCellRendererText *celltext = (GtkCellRendererText *)cell;
+  GtkCellRendererText *celltext = (GtkCellRendererText *) cell;
   PangoRectangle rect;
   PangoLayout *layout;
 
-  if (celltext->fixed_size)
+  if (celltext->calc_fixed_height)
     {
-      if (width)
-       *width = celltext->width;
-      if (height)
-       *height = celltext->height;
+      PangoContext *context;
+      PangoFontMetrics metrics;
+      PangoFontDescription font_desc;
+
+      font_desc = (* widget->style->font_desc);
+
+      if (celltext->family_set &&
+         celltext->font.family_name)
+       font_desc.family_name = celltext->font.family_name;
+      if (celltext->style_set)
+       font_desc.style = celltext->font.style;
 
-      return;
+      if (celltext->variant_set)
+       font_desc.variant = celltext->font.variant;
+
+      if (celltext->weight_set)
+       font_desc.weight = celltext->font.weight;
+
+      if (celltext->stretch_set)
+       font_desc.stretch = celltext->font.stretch;
+
+      if (celltext->size_set &&
+         celltext->font.size >= 0)
+       font_desc.size = celltext->font.size;
+
+      context = gtk_widget_get_pango_context (widget);
+      pango_context_get_metrics (context,
+                                &font_desc,
+                                pango_context_get_language (context),
+                                &metrics);
+      gtk_cell_renderer_set_fixed_size (cell,
+                                       cell->width, 2*cell->ypad +
+                                       celltext->fixed_height_rows*(metrics.ascent + metrics.descent)/PANGO_SCALE);
+      if (height)
+       {
+         *height = cell->height;
+         height = NULL;
+       }
+      celltext->calc_fixed_height = FALSE;
+      if (width == NULL)
+       return;
     }
-  
   layout = get_layout (celltext, widget, FALSE, 0);
   pango_layout_get_pixel_extents (layout, NULL, &rect);
 
@@ -1187,29 +1245,33 @@ gtk_cell_renderer_text_render (GtkCellRenderer    *cell,
 }
 
 /**
- * gtk_cell_renderer_text_set_fixed_size:
+ * gtk_cell_renderer_text_set_fixed_height_from_font:
  * @renderer: A #GtkCellRendererText
- * @fixed_size: TRUE if the renderer should be a fixed height.
- * @width: The width of the cell
- * @height: The height it of the cell, or -1
+ * @number_of_rows: Number of rows of text each cell renderer is allocated, or -1
  * 
- * Sets the height of a renderer to explicitly be a certain size.  This
- * function is unflexible, and should really only be used if calculating the
- * size of a cell is too slow.
+ * Sets the height of a renderer to explicitly be determined by the "font" and
+ * "y_pad" property set on it.  Further changes in these properties do not
+ * affect the height, so they must be accompanied by a subsequent call to this
+ * function.  Using this function is unflexible, and should really only be used
+ * if calculating the size of a cell is too slow.  If @no_rows is -1, then the
+ * fixed height is unset, and the height is determined by the properties again.
  **/
 void
-gtk_cell_renderer_text_set_fixed_size (GtkCellRendererText *renderer,
-                                      gboolean             fixed_size,
-                                      gint                 width,
-                                      gint                 height)
+gtk_cell_renderer_text_set_fixed_height_from_font (GtkCellRendererText *renderer,
+                                                  gint                 number_of_rows)
 {
   g_return_if_fail (GTK_IS_CELL_RENDERER_TEXT (renderer));
+  g_return_if_fail (number_of_rows == -1 || number_of_rows > 0);
 
-  if (renderer->fixed_size == (fixed_size)?TRUE:FALSE)
-    return;
-
-  renderer->fixed_size = (fixed_size)?TRUE:FALSE;
-  renderer->height = height;
-  renderer->width = width;
-    
+  if (number_of_rows == -1)
+    {
+      gtk_cell_renderer_set_fixed_size (GTK_CELL_RENDERER (renderer),
+                                       GTK_CELL_RENDERER (renderer)->width,
+                                       -1);
+    }
+  else
+    {
+      renderer->fixed_height_rows = number_of_rows;
+      renderer->calc_fixed_height = TRUE;
+    }
 }
index 58068ed9a2995dd4cc7b6e3c43087b6922ef226b..523d39a036d4bd34cd1e9362e90cdf84d32e7b32 100644 (file)
@@ -54,10 +54,8 @@ struct _GtkCellRendererText
   PangoUnderline underline_style;
 
   gint rise;
-  gint width;
-  gint height;
+  gint fixed_height_rows;
 
-  guint fixed_size : 1;
   guint strikethrough : 1;
 
   /* editable feature doesn't work */
@@ -83,6 +81,7 @@ struct _GtkCellRendererText
   guint strikethrough_set : 1;
 
   guint editable_set : 1;
+  guint calc_fixed_height : 1;
 };
 
 struct _GtkCellRendererTextClass
@@ -90,13 +89,11 @@ struct _GtkCellRendererTextClass
   GtkCellRendererClass parent_class;
 };
 
-GtkType          gtk_cell_renderer_text_get_type       (void);
-GtkCellRenderer *gtk_cell_renderer_text_new            (void);
+GtkType          gtk_cell_renderer_text_get_type (void);
+GtkCellRenderer *gtk_cell_renderer_text_new      (void);
 
-void             gtk_cell_renderer_text_set_fixed_size (GtkCellRendererText *renderer,
-                                                       gboolean             fixed_size,
-                                                       gint                 width,
-                                                       gint                 height);
+void             gtk_cell_renderer_text_set_fixed_height_from_font (GtkCellRendererText *renderer,
+                                                                   gint                 number_of_rows);
 
 
 #ifdef __cplusplus
index 81bbaf0dcb8411ca983320bcedc108a8fa1822d1..5c0f29ef338eb39a4524574aa08d2b2564a2512b 100644 (file)
@@ -65,6 +65,13 @@ static gboolean     gtk_list_store_iter_parent     (GtkTreeModel      *tree_mode
                                                    GtkTreeIter       *child);
 
 
+static void gtk_list_store_set_n_columns   (GtkListStore *list_store,
+                                           gint          n_columns);
+static void gtk_list_store_set_column_type (GtkListStore *list_store,
+                                           gint          column,
+                                           GType         type);
+
+
 /* Drag and Drop */
 static gboolean gtk_list_store_drag_data_delete   (GtkTreeDragSource *drag_source,
                                                    GtkTreePath       *path);
@@ -235,38 +242,18 @@ gtk_list_store_init (GtkListStore *list_store)
 
 /**
  * gtk_list_store_new:
- *
- * Creates a new #GtkListStore. A #GtkListStore implements the
- * #GtkTreeModel interface, and stores a linked list of
- * rows; each row can have any number of columns. Columns are of uniform type,
- * i.e. all cells in a column have the same type such as #G_TYPE_STRING or
- * #GDK_TYPE_PIXBUF. Use #GtkListStore to store data to be displayed in a
- * #GtkTreeView.
- *
- * Return value: a new #GtkListStore
- **/
-GtkListStore *
-gtk_list_store_new (void)
-{
-  return GTK_LIST_STORE (g_object_new (gtk_list_store_get_type (), NULL));
-}
-
-/**
- * gtk_list_store_new_with_types:
  * @n_columns: number of columns in the list store
  * @Varargs: all #GType types for the columns, from first to last
  *
- * Creates a new list store as with gtk_list_store_new(), simultaneously setting
- * up the columns and column types as with gtk_list_store_set_n_columns() and
- * gtk_list_store_set_column_type().  As an example,
- * gtk_tree_store_new_with_types (3, G_TYPE_INT, G_TYPE_STRING,
- * GTK_TYPE_PIXBUF); will create a new GtkListStore with three columns, of type
- * int, string and GtkPixbuf respectively.
+ * Creates a new list store as with @n_columns columns each of the types passed
+ * in.  As an example, gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING,
+ * GDK_TYPE_PIXBUF); will create a new GtkListStore with three columns, of type
+ * int, string and GDkPixbuf respectively.
  *
  * Return value: a new #GtkListStore
  **/
 GtkListStore *
-gtk_list_store_new_with_types (gint n_columns,
+gtk_list_store_new (gint n_columns,
                               ...)
 {
   GtkListStore *retval;
@@ -275,7 +262,7 @@ gtk_list_store_new_with_types (gint n_columns,
 
   g_return_val_if_fail (n_columns > 0, NULL);
 
-  retval = gtk_list_store_new ();
+  retval = GTK_LIST_STORE (g_object_new (gtk_list_store_get_type (), NULL));
   gtk_list_store_set_n_columns (retval, n_columns);
 
   va_start (args, n_columns);
@@ -298,15 +285,7 @@ gtk_list_store_new_with_types (gint n_columns,
   return retval;
 }
 
-/**
- * gtk_list_store_set_n_columns:
- * @store: a #GtkListStore
- * @n_columns: number of columns
- *
- * Sets the number of columns in the #GtkListStore.
- *
- **/
-void
+static void
 gtk_list_store_set_n_columns (GtkListStore *list_store,
                              gint          n_columns)
 {
@@ -340,19 +319,7 @@ gtk_list_store_set_n_columns (GtkListStore *list_store,
   list_store->n_columns = n_columns;
 }
 
-/**
- * gtk_list_store_set_column_type:
- * @store: a #GtkListStore
- * @column: column number
- * @type: type of the data stored in @column
- *
- * Supported types include: %G_TYPE_UINT, %G_TYPE_INT, %G_TYPE_UCHAR,
- * %G_TYPE_CHAR, %G_TYPE_BOOLEAN, %G_TYPE_POINTER, %G_TYPE_FLOAT,
- * %G_TYPE_DOUBLE, %G_TYPE_STRING, %G_TYPE_OBJECT, and %G_TYPE_BOXED, along with
- * subclasses of those types such as %GDK_TYPE_PIXBUF.
- *
- **/
-void
+static void
 gtk_list_store_set_column_type (GtkListStore *list_store,
                                gint          column,
                                GType         type)
index 1d6348872718689f69a20e3723876f09cbefdee7..f78000f6800b157cb566e10c7afdf1b920ef0f97 100644 (file)
@@ -60,14 +60,8 @@ struct _GtkListStoreClass
 
 
 GtkType       gtk_list_store_get_type        (void);
-GtkListStore *gtk_list_store_new             (void);
-GtkListStore *gtk_list_store_new_with_types  (gint          n_columns,
+GtkListStore *gtk_list_store_new             (gint          n_columns,
                                              ...);
-void          gtk_list_store_set_n_columns   (GtkListStore *store,
-                                             gint          n_columns);
-void          gtk_list_store_set_column_type (GtkListStore *store,
-                                             gint          column,
-                                             GType         type);
 void          gtk_list_store_set_value       (GtkListStore *store,
                                              GtkTreeIter  *iter,
                                              gint          column,
index c03bac4e479ed773f01664fc04c1512dd0f58f26..8032294dce796b56295f958af625e6a37a95be17 100644 (file)
@@ -64,6 +64,13 @@ static gboolean     gtk_tree_store_iter_parent     (GtkTreeModel      *tree_mode
                                                    GtkTreeIter       *child);
 
 
+static void gtk_tree_store_set_n_columns   (GtkTreeStore *tree_store,
+                                           gint          n_columns);
+static void gtk_tree_store_set_column_type (GtkTreeStore *tree_store,
+                                           gint          column,
+                                           GType         type);
+
+
 /* DND interfaces */
 static gboolean gtk_tree_store_drag_data_delete   (GtkTreeDragSource *drag_source,
                                                   GtkTreePath       *path);
@@ -236,13 +243,7 @@ gtk_tree_store_init (GtkTreeStore *tree_store)
 }
 
 GtkTreeStore *
-gtk_tree_store_new (void)
-{
-  return GTK_TREE_STORE (g_object_new (GTK_TYPE_TREE_STORE, NULL));
-}
-
-GtkTreeStore *
-gtk_tree_store_new_with_types (gint n_columns,
+gtk_tree_store_new (gint n_columns,
                               ...)
 {
   GtkTreeStore *retval;
@@ -251,7 +252,7 @@ gtk_tree_store_new_with_types (gint n_columns,
 
   g_return_val_if_fail (n_columns > 0, NULL);
 
-  retval = gtk_tree_store_new ();
+  retval = GTK_TREE_STORE (g_object_new (GTK_TYPE_TREE_STORE, NULL));
   gtk_tree_store_set_n_columns (retval, n_columns);
 
   va_start (args, n_columns);
index b6cf74a2d2b48ddc10960e05ca27dc3ff191dc7c..37eb935f987afc52a3851a83b725710d88e4dcb0 100644 (file)
@@ -59,15 +59,8 @@ struct _GtkTreeStoreClass
 
 
 GtkType       gtk_tree_store_get_type        (void);
-GtkTreeStore *gtk_tree_store_new             (void);
-
-GtkTreeStore *gtk_tree_store_new_with_types  (gint          n_columns,
+GtkTreeStore *gtk_tree_store_new             (gint          n_columns,
                                              ...);
-void          gtk_tree_store_set_n_columns   (GtkTreeStore *tree_store,
-                                             gint          n_columns);
-void          gtk_tree_store_set_column_type (GtkTreeStore *tree_store,
-                                             gint          column,
-                                             GType         type);
 void          gtk_tree_store_set_value       (GtkTreeStore *tree_store,
                                              GtkTreeIter  *iter,
                                              gint          column,
index df79a7ae21e66156ff564904cf809da964099c43..d226e86c768144c4bd9ac49bd0b141c271f691a9 100644 (file)
@@ -2585,7 +2585,7 @@ gtk_tree_view_bin_expose (GtkWidget      *widget,
                               background_area.width,
                               background_area.height);
 
-         if (gtk_tree_view_is_expander_column(tree_view, column) &&
+         if (gtk_tree_view_is_expander_column (tree_view, column) &&
               TREE_VIEW_DRAW_EXPANDERS(tree_view))
            {
              cell_area.x += depth*tree_view->priv->tab_offset;
@@ -5147,17 +5147,20 @@ gtk_tree_view_is_expander_column (GtkTreeView       *tree_view,
 {
   GList *list;
 
-  if (tree_view->priv->expander_column == column)
-    return TRUE;
-
-  if (column != NULL)
-    return FALSE;
-
-  for (list = tree_view->priv->columns; list; list = list->next)
-    if (((GtkTreeViewColumn *)list->data)->visible)
-      break;
-  if (list && list->data == column)
-    return TRUE;
+  if (tree_view->priv->expander_column != NULL)
+    {
+      if (tree_view->priv->expander_column == column)
+       return TRUE;
+      return FALSE;
+    }
+  else
+    {
+      for (list = tree_view->priv->columns; list; list = list->next)
+       if (((GtkTreeViewColumn *)list->data)->visible)
+         break;
+      if (list && list->data == column)
+       return TRUE;
+    }
   return FALSE;
 }
 
@@ -8196,8 +8199,8 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView  *tree_view,
  * @destroy: Destroy notifier for @data, or NULL
  * 
  * This function should almost never be used.  It is meant for private use by
- * ATK for determining the number of visible rows that are removed when the user
- * collapses a row, or a row is deleted.
+ * ATK for determining the number of visible children that are removed when the
+ * user collapses a row, or a row is deleted.
  **/
 void
 gtk_tree_view_set_destroy_count_func (GtkTreeView             *tree_view,
index f79f6c2cddf35ffcc4c92a04ad06ab8e664ea440..a25774438efdb4a0b08707a1cedcfdc9c904274c 100644 (file)
@@ -60,6 +60,7 @@ struct _GtkTreeViewColumnCellInfo
   GtkTreeCellDataFunc func;
   gpointer func_data;
   GtkDestroyNotify destroy;
+  gint requested_width;
   guint16 padding;
   guint expand : 1;
   guint fill : 1;
@@ -1334,6 +1335,47 @@ gtk_tree_view_column_clear_attributes (GtkTreeViewColumn *tree_column,
     }
 }
 
+
+/**
+ * gtk_tree_view_column_set_spacing:
+ * @tree_column: A #GtkTreeViewColumn.
+ * @spacing: distance between cell renderers in pixels.
+ * 
+ * Sets the spacing field of @tree_column, which is the number of pixels to
+ * place between cell renderers packed into it.
+ **/
+void
+gtk_tree_view_column_set_spacing (GtkTreeViewColumn *tree_column,
+                                 gint               spacing)
+{
+  g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
+  g_return_if_fail (spacing >= 0);
+
+  if (tree_column->spacing == spacing)
+    return;
+
+  tree_column->spacing = spacing;
+  if (tree_column->tree_view)
+    {
+      tree_column->dirty = TRUE;
+      gtk_widget_queue_resize (tree_column->tree_view);
+    }
+}
+
+/**
+ * gtk_tree_view_column_get_spacing:
+ * @tree_column: A #GtkTreeViewColumn.
+ * 
+ * Returns the spacing of @tree_column.
+ **/
+gint
+gtk_tree_view_column_get_spacing (GtkTreeViewColumn *tree_column)
+{
+  g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), 0);
+
+  return tree_column->spacing;
+}
+
 /* Options for manipulating the columns */
 
 /**
@@ -1347,7 +1389,6 @@ void
 gtk_tree_view_column_set_visible (GtkTreeViewColumn *tree_column,
                                  gboolean           visible)
 {
-  g_return_if_fail (tree_column != NULL);
   g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
 
   visible = !! visible;
index fbb3845b152209b02715a64c875a36192655a607..b22897dd25f3ba5b98dee6ef0a0d5c5ff4b1c11d 100644 (file)
@@ -66,6 +66,7 @@ struct _GtkTreeViewColumn
   gfloat xalign;
   guint property_changed_signal;
 
+  gint spacing;
   gint width;
   gint requested_width;
   gint min_width;
@@ -135,6 +136,9 @@ void                    gtk_tree_view_column_set_cell_data_func  (GtkTreeViewCol
                                                                  GtkDestroyNotify         destroy);
 void                    gtk_tree_view_column_clear_attributes    (GtkTreeViewColumn       *tree_column,
                                                                  GtkCellRenderer         *cell_renderer);
+void                    gtk_tree_view_column_set_spacing         (GtkTreeViewColumn       *tree_column,
+                                                                 gint                     spacing);
+gint                    gtk_tree_view_column_get_spacing         (GtkTreeViewColumn       *tree_column);
 void                    gtk_tree_view_column_set_visible         (GtkTreeViewColumn       *tree_column,
                                                                  gboolean                 visible);
 gboolean                gtk_tree_view_column_get_visible         (GtkTreeViewColumn       *tree_column);
index b8e80653fe3a4f2f2cff455cda0e082ef31bab5f..ebfd6452d2cb0d31ad2d39c8daa8bacc941003e9 100644 (file)
@@ -549,8 +549,8 @@ main (int argc, char *argv[])
   gtk_init (&argc, &argv);
 
   /* First initialize all the models for signal purposes */
-  left_tree_model = (GtkTreeModel *) gtk_list_store_new_with_types (2, G_TYPE_STRING, GTK_TYPE_POINTER);
-  sample_model = (GtkTreeModel *) gtk_list_store_new_with_types (1, G_TYPE_STRING);
+  left_tree_model = (GtkTreeModel *) gtk_list_store_new (2, G_TYPE_STRING, GTK_TYPE_POINTER);
+  sample_model = (GtkTreeModel *) gtk_list_store_new (1, G_TYPE_STRING);
   sample_tree_view_top = gtk_tree_view_new_with_model (sample_model);
   sample_tree_view_bottom = gtk_tree_view_new_with_model (sample_model);
   top_right_tree_model = (GtkTreeModel *) view_column_model_new (GTK_TREE_VIEW (sample_tree_view_top));
index 854c3f84adfbc78434e3ec06070dce0cd18a0411..adf43f69152e3a7b4d5b11470608b495f29e201c 100644 (file)
@@ -154,15 +154,15 @@ make_model (void)
   TreeStruct *month = toplevel;
   GtkTreeIter iter;
 
-  model = gtk_tree_store_new_with_types (NUM_COLUMNS,
-                                        G_TYPE_STRING,
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_BOOLEAN);
+  model = gtk_tree_store_new (NUM_COLUMNS,
+                             G_TYPE_STRING,
+                             G_TYPE_BOOLEAN,
+                             G_TYPE_BOOLEAN,
+                             G_TYPE_BOOLEAN,
+                             G_TYPE_BOOLEAN,
+                             G_TYPE_BOOLEAN,
+                             G_TYPE_BOOLEAN,
+                             G_TYPE_BOOLEAN);
 
   while (month->label)
     {
index 54ff205dfb73d8cab707f189f67f6ca355a71e0b..dbd69cc16e543e56eafe667a7039d3d66ee03683 100644 (file)
@@ -65,7 +65,7 @@ main (int argc, char *argv[])
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
 
-  model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+  model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
   //  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_TREE_SORT_ASCENDING);
   g_print ("start model\n");
   tree_view = gtk_tree_view_new_with_model (model);
index 6a717836f71b9704748463f8c2f8d1a9b6ae2c75..1a46307f04f098eb8f0ece401bfd8754e001b0fe 100644 (file)
@@ -291,6 +291,8 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type)
                                                       NULL);
 
       setup_column (col);
+      gtk_tree_view_set_expander_column (tree_view, col);
+      
       
       gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
       
@@ -438,8 +440,6 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type)
 
 #endif
       
-      gtk_tree_view_set_expander_column (tree_view, 1);
-      
       /* FALL THRU */
       
     case COLUMNS_ONE:
@@ -505,10 +505,10 @@ create_list_model (void)
 
   t = get_model_types ();
   
-  store = gtk_list_store_new_with_types (N_COLUMNS,
-                                         t[0], t[1], t[2],
-                                         t[3], t[4], t[5],
-                                         t[6], t[7], t[8]);
+  store = gtk_list_store_new (N_COLUMNS,
+                             t[0], t[1], t[2],
+                             t[3], t[4], t[5],
+                             t[6], t[7], t[8]);
 
   i = 0;
   while (i < 200)
@@ -589,10 +589,10 @@ create_tree_model (void)
 
   t = get_model_types ();
   
-  store = gtk_tree_store_new_with_types (N_COLUMNS,
-                                         t[0], t[1], t[2],
-                                         t[3], t[4], t[5],
-                                         t[6], t[7], t[8]);
+  store = gtk_tree_store_new (N_COLUMNS,
+                             t[0], t[1], t[2],
+                             t[3], t[4], t[5],
+                             t[6], t[7], t[8]);
 
   i = 0;
   while (i < G_TYPE_RESERVED_LAST_FUNDAMENTAL)
@@ -675,8 +675,8 @@ main (int    argc,
   models[MODEL_SORTED_TREE] = gtk_tree_model_sort_new_with_model (model);
   g_object_unref (G_OBJECT (model));
 
-  models[MODEL_EMPTY_LIST] = GTK_TREE_MODEL (gtk_list_store_new ());
-  models[MODEL_EMPTY_TREE] = GTK_TREE_MODEL (gtk_tree_store_new ());
+  models[MODEL_EMPTY_LIST] = GTK_TREE_MODEL (gtk_list_store_new (0));
+  models[MODEL_EMPTY_TREE] = GTK_TREE_MODEL (gtk_tree_store_new (0));
   
   models[MODEL_NULL] = NULL;
 
@@ -1374,7 +1374,7 @@ run_automated_tests (void)
     gint i;
     GtkTreeIter iter;
     
-    store = gtk_list_store_new_with_types (1, G_TYPE_INT);
+    store = gtk_list_store_new (1, G_TYPE_INT);
 
     model = GTK_TREE_MODEL (store);
     
@@ -1443,7 +1443,7 @@ run_automated_tests (void)
     GtkTreeStore *store;
     GtkTreeIter root;
 
-    store = gtk_tree_store_new_with_types (1, G_TYPE_INT);
+    store = gtk_tree_store_new (1, G_TYPE_INT);
     gtk_tree_model_get_iter_root (GTK_TREE_MODEL (store), &root);
     treestore_torture_recurse (store, &root, 0);
     
index 84b127d31e1a1db31b9c918333a4282c24b1311d..0c966d76a33bf9b4c6bf71fe97c5e130c721a4c2 100644 (file)
@@ -353,7 +353,7 @@ main (int argc, char *argv[])
 {
   gtk_init (&argc, &argv);
 
-  base_model = gtk_tree_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
+  base_model = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
 
   /* FIXME: reverse this */
   make_window (0);